"""
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
实例化：创建一个类的实例，类的具体对象。
方法：类中定义的函数。
类变量：类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。
局部变量：定义在方法中的变量，作用域为当前的方法。
实例变量：在方法内声明，需要加self. 标识区分。
"""
# 类的定义

# 函数
def xxx():
    pass

class HouseOne:
    # 类变量
    door = "red"
    floor = "white"
    # 构造函数， 类实例化的时候就调用，
    # 常常在构造方法内，定义一些，一开始就需要的变量
    def __init__(self):
        # 实例变量，在方法内，但是需要加self 进行区分，作用域为整个实例对象
        self.sofa = "soft"

    # 方法是实例对象中的函数
    def sleep(self):
        # 局部变量，作用域为此方法内
        name = "Bob"
        print(f"{name}房子可以用来睡觉,在{self.sofa}")

# 实例化,bob_house就是一个实例对象。
bob_house = HouseOne()
# mary_house也是实例对象
mary_house = HouseOne()

# 1. 类变量是所有实例对象共用的
# print("bob_house的门的颜色",bob_house.door)
# # ctrl + d ,快捷复制
# print("bob_house的门的颜色",bob_house.door)

# 2. 类变量可以进行修改，修改之后会影响实例对象
# HouseOne.door = "red2"
# print("bob_house的门的颜色",bob_house.door)
# print("bob_house的门的颜色",bob_house.door)

# 3. 实例变量也是可以修改的，通过实例对象.变量
# 4. 如果实例变量和类变量冲突，那么会优先使用实例变量
# bob_house.door = "black"
# print("bob_house的门的颜色",bob_house.door)
# # 5. 实例变量的修改，不会影响类变量也不会影响其他实例变量
# print("mary_house的门的颜色",mary_house.door)
